#include <bits/stdc++.h>
using namespace std;
//https://www.nowcoder.com/practice/351b87e53d0d44928f4de9b6217d36bb?tpId=230&tqId=39767&ru=/exam/oj
// int main()
// {
//     int n;
//     cin>>n;
//     vector<int> price(n);
//     for(int i=0;i<n;i++)cin>>price[i];
//     int earnings=0,minprice=INT_MAX;
//     for(int i=0;i<n-1;i++)
//     {
//         minprice=min(minprice,price[i]);
//         earnings=max(earnings,price[i+1]-minprice);
//     }
//     cout<<earnings<<endl;
//     return 0;
// }
//https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId=182&tqId=34752&ru=/exam/oj
// class Solution {
//     public:
//       int search(string s,int left,int right)
//       {
//         while(left>=0&&right<s.size()&&s[left]==s[right])
//         {
//             left--,right++;
//         }
//         return right-left-1;
//       }
//       int getLongestPalindrome(string s) {
//         if(s.size()==1)return 1;
//         int maxlen=0;
//         for(int i=0;i<s.size();i++)
//         {
//             //这里是判断回文子串是奇数还是偶数的情况，不是字符串
//             //奇数
//             int max1=search(s,i,i);            
//             //偶数
//             int max2=search(s,i,i+1);
//             maxlen=max(maxlen,max(max1,max2));
//         }
//         return maxlen;
//       }
//   };
// int main()
// {
//     string s1;
//     cin>>s1;
//     cout<<Solution().getLongestPalindrome(s1);
//     return 0;
// }
//https://www.nowcoder.com/practice/cc1a9bc523a24716a117b438a1dc5706?tpId=230&tqId=40428&ru=/exam/oj
int n,m,x,y;
int main()
{
    //(n,m)终点坐标，(x,y)马的坐标
    cin>>n>>m>>x>>y;
    vector<vector<long long>> dp(n+2,vector<long long>(m+2));
    x++,y++;
    dp[0][1]=1;
    for(int i=1;i<=n+1;i++)
    {
        // dp[0][i]=dp[i][0]=1;
        for(int j=1;j<=m+1;j++)
        {
            if(i!=x&&j!=y&&abs(i-x)+abs(j-y)==3||i==x&&j==y)dp[i][j]=0;
            else dp[i][j]=dp[i-1][j]+dp[i][j-1];           
        }
    }
    cout<<dp[n+1][m+1]<<endl;
    return 0;
}